package com.learn.configuration;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.context.annotation.Bean;

/**
 * 若是需要全局使用该负载均衡策略则使Spring容器扫描到该IRule即可，即在当前类上添加@Configuration注解
 * 若是不需要全局使用该负载均衡策略则在启动类上添加@RibbonClient注解，配置应用名和当前类.class即可，注意不要让Spring容器扫描到该IRule
 */
public class RibbonRuleConfiguration {
    /**
     * 修改负载均衡策略，默认轮询。通过IRule实现类修改策略
     */
    @Bean
    public IRule ribbonRule() {
        /**
         * RoundRobinRule：轮询
         * AvailabilityFilteringRule：先过滤掉故障服务，在对剩下服务轮询
         * RetryRule：先轮询获取服务，轮询到故障服务时在规定时间内重试
         * RandomRule：随机
         */
        return new RoundRobinRule();
    }
}
